package com.security.securityandoauth.controller;

import com.alibaba.fastjson2.JSON;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

@Controller
public class LoginController {

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/test")
    @ResponseBody
    public String sayHello() {
        Map<String, Object> data = new HashMap<>();
        data.put("code", 200);
        data.put("message", "请求成功");
        data.put("data", "hello world");
        return JSON.toJSONString(data);
    }

    /**
     * GitHub 登录成功后的处理逻辑（授权码、令牌、信息不需要手动写了，框架帮我们搞了，某些网站还是需要手写的）
     */
    @GetMapping("/login/github/success")
    @ResponseBody
    public String githubSuccess(@AuthenticationPrincipal OAuth2User principal) {
        // 从 OAuth2User 中提取 GitHub 用户信息
        String username = principal.getAttribute("login");  // GitHub 用户名
        String email = principal.getAttribute("email");    // GitHub 邮箱（需用户授权）
        String avatarUrl = principal.getAttribute("avatar_url");  // 用户头像地址
        Integer githubId = principal.getAttribute("id");  // GitHub 唯一用户 ID

        // 打印用户信息（实际项目中可存入数据库、生成会话等）
        System.out.println("GitHub 登录成功！");
        System.out.println("用户名：" + username);
        System.out.println("邮箱：" + (email != null ? email : "用户未授权获取邮箱"));
        System.out.println("头像地址：" + avatarUrl);
        System.out.println("GitHub ID：" + githubId);

        // 封装数据
        Map<String, Object> data = new HashMap<>();
        data.put("code", 200);
        data.put("message", "登录成功");
        data.put("data", principal);

        return JSON.toJSONString(data);
    }

}
